LN Markets's newsletter What are PTLCs
以下の説明は違う気がしてきたが、よくわからん
概要
HTLC はすべてが同じ preimage で lock されているが、PTLC では異なる値で lock される。それでいて、値を公開して unlock することが次の人の値を導くことに繋がるため、HTLC network と同様の支払いが可能
自分が知っている値を、前の人からもらった値から引いていく
楕円曲線上の Point(点) でロックされ、その Point を公開鍵としたときに対応する署名を示すことで unlock できる。加法準同型性のある署名が必要。shnorr とか。
payee は s と P=s*G を作成し、payer に P を共有する
payer はルートを決める。例えば3ホップあるとしたら、4つのランダムな値(a,b,c,d)を作成し、それぞれのホップにランダムな値を渡し(ホップB には bを)、payee には4つの値の合計の値(a+b+c+d)を渡す
最初のホップBには (a+s)*G でロックする。Bがpayerから受け取るには対応する秘密鍵(a+s)が必要。
payer は a*G + s*G(これはPとしてもらっている)より (a+s)*G がわかる
つまりそれぞれのホップに対して、自分が生成したランダムな値と payer の秘密鍵を足し合わせたものでロックする。payer の秘密鍵はわからないが、(a+s)*G が a*G + P であるためロックできる。
B は a+s を知りたいが、b しかわからない。sはpayeeしか知らない
ここでBが a+s を知るためには、a+s=a+b+s-b であることから、a+b+s がわかればいい。bはBが知っている値。
次のホップ C が、a+b+s を知っていることを payer は B に伝える
そこでB は C に対して、(a+b+s)*G でロックする。C が B から受け取るには a+b+s が必要
C -> D
(a+b+c+s)*G でロック
D -> payee
(a+b+c+d+s)*G でロック
payee は (a+b+c+d)とs を知っている
D は a+b+c+d+s-d = a+b+c+s を算出して、C のスクリプトを unlock する
これによりCは a+b+c+s を知る。a+b+c+s-c = a+b+s でBのスクリプトをunlockする
B は a+b+s を知り、a+s を算出して、payer のスクリプトを unlock する
payer は a+s から s を知り、s を知っていることは P に対しての支払い証明になる